/**
 * 
 */
package de.hrw.androidapp.util;

import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import de.hrw.androidapp.model.SpeisePlanWochentag;

/**
 * @author tvh-dev
 *
 */
public class SpeisePlanXMLParser 
extends XMLParser 
{
	/**
	 * @param xmlUrl
	 */
	public SpeisePlanXMLParser(String xmlUrl) 
	{
		super(xmlUrl);
	}

	/* (non-Javadoc)
	 * @see de.hrw.androidapp.delegates.SpeisePlanParserInterface#parse()
	 */
	@Override
	public List<SpeisePlanWochentag> parse()
	{
		ArrayList<SpeisePlanWochentag> speisePlanWochentage = new ArrayList<SpeisePlanWochentag>();
		
		Elements anchorElements = doc.select("a[href^=#fragment");

		int anchorElementsCount = anchorElements.size();
		if (anchorElementsCount == 5)
		{
			Elements fragmentElements = doc.select("div[id^=fragment");
			
			for (int i = 0; i < anchorElementsCount; i++)
			{
				Element element = anchorElements.get(i);
				SpeisePlanWochentag speisePlanWochentag = new SpeisePlanWochentag();
				
				//	Wochentag
				String wochentag = element.select("span").get(0).html();
				speisePlanWochentag.setWochentag(wochentag);
				
				//	Datum
				String wochentagDatum = element.select("span[style]").html();
				speisePlanWochentag.setWochentagDatum(wochentagDatum);

				Element fragmentElement = fragmentElements.get(i);
				Elements trElements = fragmentElement.select("tr");
				
				//	Stammessen
				String stammessen = extractTRElementHtml(0, trElements);
				speisePlanWochentag.setStammessen(stammessen);
				
				//	Wahlessen
				String wahlessen = extractTRElementHtml(2, trElements);
				speisePlanWochentag.setWahlessen(wahlessen);
				
				//	Spezial
				String spezial = extractTRElementHtml(4, trElements);
				speisePlanWochentag.setSpezial(spezial);
				
				//	Dessert
				String dessert = extractTRElementHtml(6, trElements);
				speisePlanWochentag.setDessert(dessert);
				
				//	Beilagen
				String beilagen = extractTRElementHtml(8, trElements);
				speisePlanWochentag.setBeilagen(beilagen);
				
				speisePlanWochentage.add(speisePlanWochentag);
			}
		}
		else
		{
			throw new RuntimeException("seezeit.com code has changed!");
		}

		return speisePlanWochentage;
	}

	/**
	 * @param trElementNo
	 * @param trElements
	 * @return
	 */
	private String extractTRElementHtml(int trElementNo, Elements trElements) {
		String html = trElements.get(trElementNo).select("td[id=futterSpalte2] > div").get(0).html();
		html = Jsoup.parse(html).text();
		html = html.replaceAll("\n", "");
		
		return html;
	}
}
